public class Marienkaefer {

   private final int punkte;
   private final int fluegel;
   private final int beinchen;
   private int alter;
   private final String farbe;
   private final String farbePunkte;
   private boolean tot = false;
   private final char geschlecht;
   private boolean satt;
   private String mageninhalt;
   private int gefresseneBlattlaeuse = 0;
   
   /**
    * Standardkonstruker der Marienkäfer mit Standardweten für Flügel, 
    * Beinchen, Punkte, Farbe, Farbe der Punkte sowie Geschlecht initialisiert
    */
   public Marienkaefer() {
       this(2, 6, 5, "rot", "schwarz", 'm');
   }

   /**
    * 
    * 
    * @param fluegel Anzahl der Flügel
    * @param beinchen Anzahl der Beinchen
    * @param punkte Anzahl der Punkte
    * @param farbe Die Farbe des Marienkäfers
    * @param farbePunkte Die Farbe der Punktes des Marienkäfers
    * @param geschlecht Das Geschlecht des Marienkäfers. w oder m
    */
   public Marienkaefer(int fluegel, int beinchen, int punkte, String farbe,
           String farbePunkte, char geschlecht) {
       this.fluegel = fluegel;
       this.beinchen = beinchen;
       this.farbe = farbe;
       this.farbePunkte = farbePunkte;
       this.geschlecht = geschlecht;
       this.punkte = punkte;
   }

   /**
    * Gibt das Alter des Marienkäfers zurück
    * @return Alter des Marienkäfers zurück
    */
   public int getAlter() {
       return alter;
   }

   /**
    * Setzt das Alter des Marienkäfers
    * @param alter Wert zwischen 0 und 10
    */
   public void setAlter(int alter) {
       if (alter <= 10 && alter >= 0){
    	   if(this.alter < alter)
    		   this.alter = alter;
       }
       else{
           throw new IllegalArgumentException(
                   "Alter größer als 10 oder kleiner 0");
       }
   }

   /**
    * Gibt zurück ob der Marienkäfer tot ist
    * @return Bei true ist der Marienkäfer tot
    */
   public boolean isTot() {
       return tot;
   }

   /**
    * Lässt den Marienkäfer sterben, sofern er nicht schon tot ist
    * @throws IllegalStateException sofern der Marienkäfer schon tot ist
    */
   
   public void stirb(){
       if(this.tot == false)
           this.tot = true;
   }

   /**
    * Gibt den Mageninhalt als String zurück
    * @return Mageninhalt
    */
   public String getMageninhalt() {
       return mageninhalt;
   }

   public void setMageninhalt(String mageninhalt) {
       this.mageninhalt = mageninhalt;
   }

   public boolean isSatt() {
       return satt;
   }

   public int getPunkte() {
       return punkte;
   }

   public int getFluegel() {
       return fluegel;
   }

   public int getBeinchen() {
       return beinchen;
   }
   
   /**
    * Lässt den Marienkäfer Blattläuse fressen und setzt den Mageninhalt auf satt, sofern er mehr als 10 gefressen hat
    * @param anzahlBlattläuse Die Anzahl der Blattläuse die der Marienkäfer fressen soll
    * @return Gibt -1 zurück falls der Marienkäfer tot ist, sonst die Anzahl der Blattläuse im Magen
    */
   public int friss(int anzahlBlattläuse){
	   if(this.isTot() == false){
	   this.gefresseneBlattlaeuse += anzahlBlattläuse;
	   
	   if(gefresseneBlattlaeuse >= 10){
		   this.satt = true;
	   }
	   
	   return gefresseneBlattlaeuse;
	   }
	   else{
		   return -1;
	   }
   }

   public String getFarbe() {
       return farbe;
   }

   public String getFarbePunkte() {
       return farbePunkte;
   }

   public char getGeschlecht() {
       return geschlecht;
   }
   
   /**
    * Lässt zwei Marienkäfer sich paaren
    * @param otherMarienkäfer ein zweiten Marienkäfer
    * @return true wenn ein neuer Marienkäfer dabei entsteht
    */
   public boolean sex(Marienkaefer otherMarienkäfer){
	   if((this.geschlecht == 'm' && otherMarienkäfer.getGeschlecht() == 'w') 
		 || (this.geschlecht == 'w' && otherMarienkäfer.getAlter() == 'm') &&
		 (this.tot == false && otherMarienkäfer.isTot() == false)){
		   return true;
	   }
	   else{
		   return false;
	   }
   }

}
